package main

import (
	"context"
	"fmt"
	"time"
)

type MiraMenu struct {
	cancel context.CancelFunc
}

func main() {
	// 创建一个父Context和取消函数
	parentCtx, cancel := context.WithCancel(context.Background())

	// 创建一个MiraMenu实例
	menu := MiraMenu{
		cancel: cancel,
	}

	// 启动一个goroutine来执行一些任务
	go menu.doSomething(parentCtx)

	// 等待一段时间后取消操作
	time.Sleep(2 * time.Second)
	menu.cancel()

	// 等待一段时间让任务完成
	time.Sleep(1 * time.Second)
}

func (m *MiraMenu) doSomething(ctx context.Context) {
	for {
		select {
		case <-ctx.Done():
			fmt.Println("任务已取消")
			return
		default:
			fmt.Println("正在执行任务")
			time.Sleep(500 * time.Millisecond)
		}
	}
}
